重點:更多常用字串方法 — indexOf, lastIndexOf, contains, replace, replaceAll, startsWith, endsWith,
以下是常用的字串方法 + 用途比較:
方法 | 功能 / 用途 |
---|---|
indexOf(String/char) |
在字串中找第一次出現某字串或字元的位置,找不到回傳 -1 。可以從某個 fromIndex 開始找。 |
lastIndexOf(...) |
在字串中找最後一次出現某字串或字元的位置。 |
contains(CharSequence) |
判斷某字串是否出現在目標字串中,回傳 boolean 。 |
startsWith(String prefix) / endsWith(String suffix) |
判斷字串開頭是不是某個 prefix,或結尾是不是某個 suffix。 |
replace(old, new) / replace(CharSequence target, CharSequence replacement) |
以字面(literal)方式替換所有出現的 target → replacement。 |
replaceAll(regex, replacement) |
用正規表達式來匹配,替換所有匹配項目。與 replace 差別在於可以用 regex。 |
字串比較:equals , equalsIgnoreCase ** |
equals 比對內容完全相同,包括大小寫;equalsIgnoreCase 則忽略大小寫差異。 |
範例:
public class Day7Demo {
public static void main(String[] args) {
String s = "Hello, Java World! Hello, Java!";
// indexOf / lastIndexOf / contains
int idx1 = s.indexOf("Java"); // 第一次出現 Java
int idx2 = s.indexOf("Java", idx1 + 1); // 從第一次之後再找
int last = s.lastIndexOf("Hello"); // 最後一次 Hello
boolean hasWorld = s.contains("World"); // 是否包含 "World"
System.out.println("第一次 Java 在位置: " + idx1);
System.out.println("第二次 Java 在位置: " + idx2);
System.out.println("最後一次 Hello 在位置: " + last);
System.out.println("包含 World 嗎? " + hasWorld);
// startsWith / endsWith
System.out.println("以 Hello 開頭嗎? " + s.startsWith("Hello"));
System.out.println("以 java 結尾嗎? " + s.endsWith("Java!")); // 注意大小寫
// replace / replaceAll
String r1 = s.replace("Java", "Python");
System.out.println("用 replace → " + r1);
// 用 replaceAll 和 regex
String r2 = s.replaceAll("Hello,? ?", "Hi ");
// 把 "Hello," 或 "Hello, " 替換成 "Hi "
System.out.println("用 replaceAll → " + r2);
// 字串比較
String a = "Test";
String b = new String("Test");
System.out.println("a == b ? " + (a == b)); // 比較參考地址 / 物件
System.out.println("a.equals(b) ? " + a.equals(b)); // 比較字串內容
System.out.println("equalsIgnoreCase: " + a.equalsIgnoreCase("test"));
}
}
輸出(可能結果):
第一次 Java 在位置: 7
第二次 Java 在位置: 25
最後一次 Hello 在位置: 14
包含 World 嗎? true
以 Hello 開頭嗎? true
以 java 結尾嗎? false
用 replace → Hello, Python World! Hello, Python!
用 replaceAll → Hi Python World! Hi Python!
a == b ? false
a.equals(b) ? true
equalsIgnoreCase: true
補充:進階應用
public class ReplaceDemo {
public static void main(String[] args) {
String text = "Hello123World456";
// replace:直接替換字面
System.out.println(text.replace("123", "ABC"));
// HelloABCWorld456
// replaceAll:使用 regex
System.out.println(text.replaceAll("\\d+", "#"));
// Hello#World#
}
}
3.字串比較的陷阱
public class CompareDemo {
public static void main(String[] args) {
String a = "Java";
String b = "Java";
String c = new String("Java");
System.out.println(a == b); // true (字串池 String Pool 重複利用)
System.out.println(a == c); // false (不同物件)
System.out.println(a.equals(c)); // true (內容相同)
}
}
public class BuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append("Item").append(i).append(", ");
}
System.out.println(sb.toString());
}
}
輸出結果:
Item0, Item1, Item2, Item3, Item4,
(💡 StringBuilder 在單執行緒下效能最佳;多執行緒則用 StringBuffer(執行緒安全)。)